package main.java.day08;

import java.io.*;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

/**
 * 使用异常捕获机制完成下述读取操作
 * 读取emp.txt文件，并将每个员工信息读取出来，以一个Emp实例保存，然后将
 * 这些Emp实例存入到一个Map集合中。其中key为字符串，是该员工名字，而value
 * 是该Emp实例。
 * 存入后，要求用户输入一个员工的名字,如:张三
 * 若该员工存在则输出该员工所有信息(Emp的toString方法返回的字符串)
 * 输入的员工名若是英文，不要求区分大小写。
 * 若输入的员工名字不存在，则显示"查无此人"
 * 
 * @author Xiloer
 *
 */
public class Test04 {
    public static void main(String[] args) {
        File file = new File("src"+File.separator+"homework03"+File.separator+"emp.txt");
        Map<String,Emp> map = getMap(file);
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入员工姓名:");
        String input = scan.nextLine().toLowerCase();
        if(map.containsKey(input)){
            System.out.println(map.get(input).toString());
        } else {
            System.out.println("查无此人");
        }
    }
    //传入文件,输出解析后的map
    public static Map<String,Emp> getMap(File file){
        BufferedReader br = null;
        Map<String,Emp> map = new HashMap<String,Emp>();
        try{
            br = new BufferedReader(
                    new InputStreamReader(
                            new FileInputStream(file),"UTF-8"));
            String str = null;
            while( (str = br.readLine())!= null ){
                String[] perInfo = str.split(",");
                String name = perInfo[0];
                int age = Integer.parseInt(perInfo[1]);
                String gender = perInfo[2];
                int salary = Integer.parseInt(perInfo[3]);
                Date hiredate = new SimpleDateFormat("yyyy-MM-dd").parse(perInfo[4]);
                Emp emp = new Emp(name,age,gender,salary,hiredate);
                map.put(emp.getName().toLowerCase(), emp);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            //关闭流
            if(br != null){
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return map;
    }
}
